#关键字参数：**kw
#特点：关键字参数允许你传入0个或者任意个含参数名的参数，这些参数在函数内部自动组装为dict
def person(name,age,**kw):
    print('name:',name,'age:',age,'other:',kw)

person('zhangsan',22,city='shanghai')
person('lisi',33)

extra={'city':'Beijing','job':'Enginer'}
person('wangwu',66,**extra)


#命名关键字参数,使用*号分隔符，*号后面的参数被视为命名关键字参数
#特点：指定参数名字
def person2(name,age,*,city,job):
    print(name,age,city,job)
    
person2('zhaoliu',55,city='yunnan',job='Enginer')

#使用命名关键字参数时，要特别注意，如果没有可变参数，就必须加一个*作为特殊分隔符。如果缺少*，Python解释器将无法识别位置参数和命名关键字参数
def person3(name,age,city,job):
   # 缺少 *，city和job被视为位置参数
    pass
    
#参数组合
def f1(a,b,c=0,*args,**kw):
    print('a=',a,'b=',b,'c=',c,'args=',args,'kw=',kw)

f1(1,2)
f1(1,2,3)
f1(1,2,3,4,5)
f1(1,2,3,4,5,city='bj',job='teacher')


def f2(a,b,c=0,*,city,**kw):
    print('a=',a,'b=',b,'c=',c,'city=',city,'kw=',kw)
  
f2(1,2,city='sh')  
f2(1,2,3,city='sh',joy='teacher')
f2(1,2,3,city='sh',extra=None)

args =(2,4,6)
kw ={'city':'am','job':'student'}
f1(*args,**kw)

f2(*args,**kw)

